package br.org.reconcavotecnologia.update19.registro.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.Set;

/**
 * Classe utilitária com recursos para manipular arquivos de propriedades
 * @author Cássio Oliveira
 *
 * TODO Otimizar
 *
 */
public class UtilPropriedades {

	/** Arquivo de propriedades*/
	private File file = null;
	
	/** Nome do arquivo */
	private String fileName = null;

	/** Método construtor. Inicializa com a indicação do arquivo de propriedades */
	public UtilPropriedades(File file) {
		this.fileName = file.getName();
		this.file = file;
		if(!file.exists()){
			try {
				file.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	/** Método construtor. Inicializa com a indicação do arquivo de propriedades */
	public UtilPropriedades(String fileName) {
		this(new File(fileName));
	}

	/**
	 * Escreve uma propriedade e um valor no arquivo update.info
	 * 
	 * @param key Propriedade a ser gravada
	 * 
	 * @param value Valor do hash do arquivo
	 * 
	 */
	public void write(String key, String value){
		try {
			FileInputStream fis = new FileInputStream(file);
			Properties prop = new Properties();
			prop.load(fis);
			fis.close();
			FileOutputStream out = new FileOutputStream(file);
			prop.setProperty(key, value);			
			prop.store(out, null);
			out.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/** 
	 * Lê o valor de uma chave no arquivo de proprieades
	 * 
	 * @param key Chave da propriedade a ser lida
	 * 
	 */
	public String readHash(String key){
		try {
			FileInputStream fis = new FileInputStream(file);
			Properties prop = new Properties();
			prop.load(fis);
			fis.close();
			return prop.getProperty(key);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "";
	}
	
	/** Retorna o arquivo de propriedades no formato de HashMap */
	public Set<String> getListaArquivos() {
		try {
			FileInputStream fis = new FileInputStream(file);
			Properties prop = new Properties();
			prop.load(fis);
			fis.close();
			return prop.stringPropertyNames();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/** Retorna o nome do arquivo */
	public String getName() {
		return fileName;
	}
	
}